namespace CSharpPro._9._30;

public class Demo
{
    public void TestPrint1() //键盘输入三个整数x、y、z，请把这三个数由小到大输出
    {
        Console.Write("请输入第一个整数 x: ");
        int x = int.Parse(Console.ReadLine());

        Console.Write("请输入第二个整数 y: ");
        int y = int.Parse(Console.ReadLine());

        Console.Write("请输入第三个整数 z: ");
        int z = int.Parse(Console.ReadLine());
        int[] numbers = { x, y, z };
        Array.Sort(numbers);
        Console.WriteLine($"从小到大排序的结果为: {numbers[0]}, {numbers[1]}, {numbers[2]}");
    }

    public void TestPrint2() //打印出1-100之间所有不是7的倍数和不包含7的数字， 并求和。
    {
        int sum = 0;
        int count = 0;

        Console.WriteLine("1-100之间所有不是7的倍数且不包含7的数字：");

        for (int i = 1; i <= 100; i++)
        {
            if (i % 7 != 0 && !i.ToString().Contains("7")) //核心判断语句
            {
                Console.Write($"{i,3} ");
                sum += i;
                count++;

                if (count % 10 == 0)
                    Console.WriteLine();
            }
        }

        Console.WriteLine($"\n\n总计：{count}个数字");
        Console.WriteLine($"总和：{sum}");
    }

    public void TestPrint3() //打印九九乘法表
    {
        for (int i = 1; i <= 9; i++)
        {
            // 打印前导空格，形成三角形
            for (int k = 1; k < i; k++)
            {
                Console.Write("          "); // 10个空格
            }

            for (int j = i; j <= 9; j++)
            {
                Console.Write($"{i}×{j}={i * j,2}  ");
            }

            Console.WriteLine();
        }
    }

    public void TestPrint4() //一个数如果恰好等于它的所有真因子（即除了自身 外的所有因数）之和，这个数就称为"完数"。请编程求出1000以内的所有完数。
    {
        int perfectNumberCount = 0;

        for (int num = 2; num <= 1000; num++)
        {
            int sum = 0;
            List<int> trueFactors = new List<int>();

            // 找出所有真因子
            for (int i = 1; i <= num / 2; i++)
            {
                if (num % i == 0)
                {
                    sum += i;
                    trueFactors.Add(i);
                }
            }

            // 检查是否为完数
            if (sum == num)
            {
                perfectNumberCount++;
                Console.WriteLine($"\n完数 #{perfectNumberCount}: {num}");
                Console.Write($"真因子: ");
                for (int i = 0; i < trueFactors.Count; i++)
                {
                    Console.Write(trueFactors[i]);
                    if (i < trueFactors.Count - 1)
                        Console.Write(", ");
                }

                Console.WriteLine();
                Console.Write($"验证: {string.Join(" + ", trueFactors)} = {sum}");
                Console.WriteLine();
            }
        }

        Console.WriteLine($"\n总计：在1000以内找到了 {perfectNumberCount} 个完数");
    }

    public void TestPrint5() //键盘录入一个正整数，请求：1.它是几位数？2.逆序打印出各位数字。
    {
        Console.Write("请输入一个正整数：");
        string input = Console.ReadLine();

        if (int.TryParse(input, out int number) && number > 0)
        {
            // 1. 位数
            int digitCount = input.Length;
            Console.WriteLine($"1. 这是一个{digitCount}位数");

            // 2. 逆序打印（使用LINQ）
            var reversedDigits = input.Reverse();
            Console.Write("2. 逆序打印：");
            Console.WriteLine(string.Join(" ", reversedDigits));

            // 额外：使用LINQ计算数字之和
            int sum = input.Sum(c => c - '0');
            Console.WriteLine($"3. 各位数字之和：{sum}");
        }
        else
        {
            Console.WriteLine("输入错误！请输入一个正整数。");
        }

    }

    public void TestPrint6()//打印菱形，根据输入的行数，显示菱形形状
    {
        
    }
}